Docker konteynerlari yordamida mustahkam va izchil JavaScript ishlab chiqish muhitini oʻrnatishni oʻrganing. Ushbu qoʻllanma asosiy sozlashdan tortib, ilgʻor konfiguratsiyalargacha boʻlgan hamma narsani qamrab oladi.
JavaScript Ishlab Chiqish Muhiti: Docker Konteyner Konfiguratsiyasi
Bugungi tez sur'atlar bilan rivojlanayotgan dasturiy ta'minot ishlab chiqish sohasida izchil va takrorlanadigan ishlab chiqish muhitini saqlab turish juda muhim. Turli operatsion tizimlar, turli dasturiy ta'minot versiyalari va ziddiyatli bog'liqliklar qo'rqinchli "u mening mashinamda ishlaydi" sindromiga olib kelishi mumkin. Docker, etakchi konteynerlash platformasi, ushbu muammoni hal qilishning kuchli usulini taqdim etadi va ishlab chiquvchilarga o'z ilovalari va uning bog'liqliklarini yagona, ajratilgan birlikka joylash imkonini beradi.
Ushbu qo'llanma sizni Docker konteynerlari yordamida mustahkam va izchil JavaScript ishlab chiqish muhitini o'rnatish jarayonida bosqichma-bosqich o'tkazadi. Biz asosiy sozlashdan tortib, ilg'or konfiguratsiyalargacha bo'lgan hamma narsani qamrab olamiz, bu sizning jamoangizning turli operatsion tizimlaridan qat'i nazar, JavaScript loyihalaringiz uchun silliq va samarali ish jarayonini ta'minlaydi.
Nima uchun JavaScript ishlab chiqish uchun Docker-dan foydalanish kerak?
Xususiyatlarga sho'ng'ishdan oldin, JavaScript ishlab chiqish muhiti uchun Docker-dan foydalanishning afzalliklarini ko'rib chiqaylik:
- Izchillik: Docker sizning jamoangizdagi har bir kishi xuddi shu muhitda ishlayotganligini ta'minlaydi, moslik muammolarini bartaraf etadi va muhit farqlari tufayli kelib chiqadigan xatoliklar ehtimolini kamaytiradi. Bu, ayniqsa, geografik jihatdan tarqalgan jamoalar uchun juda muhimdir.
- Izolyatsiya: Konteynerlar xost tizimidan izolyatsiyani ta'minlaydi, boshqa loyihalar bilan ziddiyatlarning oldini oladi va sizning bog'liqliklaringiz bir-biriga xalaqit bermasligini ta'minlaydi.
- Takrorlanuvchanlik: Docker rasmlarini osongina baham ko'rish va joylashtirish mumkin, bu sizning ishlab chiqish muhitingizni turli mashinalarda yoki ishlab chiqarishda takrorlashni osonlashtiradi. Bu, ayniqsa, yangi jamoa a'zolarini jalb qilishda yoki turli xil bulut provayderlariga joylashtirishda foydalidir.
- Portativlik: Docker konteynerlari Docker-ni qo'llab-quvvatlaydigan har qanday platformada, jumladan, Windows, macOS va Linux-da ishlashi mumkin, bu esa ishlab chiquvchilarga loyihaga ta'sir qilmasdan o'zlari afzal ko'rgan operatsion tizimdan foydalanishga imkon beradi.
- Soddalashtirilgan joylashtirish: Ishlab chiqish uchun ishlatiladigan bir xil Docker tasvirini sinov va ishlab chiqarish uchun ishlatish mumkin, bu joylashtirish jarayonini soddalashtiradi va xatolar xavfini kamaytiradi.
Kerakli shartlar
Boshlashdan oldin, quyidagilar o'rnatilganligiga ishonch hosil qiling:
- Docker: Rasmiy Docker veb-saytidan (docker.com) operatsion tizimingiz uchun Docker Desktop-ni yuklab oling va o'rnating. Docker Desktop Docker Engine, Docker CLI, Docker Compose va boshqa muhim vositalarni o'z ichiga oladi.
- Node.js va npm (ixtiyoriy): Xost mashinangizda qat'iy talab qilinmasa ham, chunki ular konteynerda bo'ladi, mahalliy Node.js va npm-ga ega bo'lish konteyner tashqarisidagi vazifalar uchun yoki dastlabki loyiha tuzilmangizni o'rnatishda foydali bo'lishi mumkin. Ularni nodejs.org saytidan yuklab olishingiz mumkin.
- Kod muharriri: O'zingiz afzal ko'rgan kod muharririni tanlang (masalan, VS Code, Sublime Text, Atom). VS Code sizning ish jarayonini soddalashtirishi mumkin bo'lgan ajoyib Docker kengaytmalariga ega.
Asosiy Dockerfile konfiguratsiyasi
Har qanday Dockerga asoslangan muhitning asosi Dockerfile hisoblanadi. Ushbu faylda Docker tasvirini yaratish bo'yicha ko'rsatmalar mavjud. Node.js ilovasi uchun asosiy Dockerfile yarataylik:
# Ota-tasvir sifatida rasmiy Node.js runtime-dan foydalaning
FROM node:18-alpine
# Konteynerdagi ish katalogini o'rnating
WORKDIR /app
# package.json va package-lock.json-ni ish katalogiga nusxalash
COPY package*.json ./
# Ilova bog'liqliklarini o'rnating
RUN npm install
# Ilova manba kodini ish katalogiga nusxalash
COPY . .
# 3000 portni tashqi dunyoga oching (agar ilovangiz boshqa portdan foydalansa, moslashtiring)
EXPOSE 3000
# Konteyner ishga tushganda bajariladigan buyruqni belgilang
CMD ["npm", "start"]
Har bir qatorni ajratib ko'rsataylik:
FROM node:18-alpine: Konteyner uchun asosiy tasvirni belgilaydi. Bu holda biz rasmiy Node.js 18 Alpine tasviridan foydalanamiz, bu engil Linux tarqatishidir. Alpine o'zining kichik o'lchami bilan mashhur, bu sizning Docker tasviringizni ixcham saqlashga yordam beradi. Loyihangiz uchun mos bo'lgan boshqa Node.js versiyalarini ko'rib chiqing.WORKDIR /app: Konteyner ichidagi ish katalogini/appga o'rnatadi. Bu sizning ilovangiz kodi joylashadigan joy.COPY package*.json ./:package.jsonvapackage-lock.json(yoki agar siz Yarn-dan foydalansangizyarn.lock) fayllarini ish katalogiga nusxalaydi. Ushbu fayllarni birinchi nusxalash Docker-ganpm installqadamini keshlash imkonini beradi, bu faqat ilova kodini o'zgartirganda qurilish vaqtini sezilarli darajada tezlashtiradi.RUN npm install:package.jsonda belgilangan ilova bog'liqliklarini o'rnatadi.COPY . .: Mahalliy loyiha katalogingizdagi barcha qolgan fayllar va kataloglarni konteyner ichidagi ish katalogiga nusxalaydi.EXPOSE 3000: 3000 portni ochib, uni xost mashinasidan foydalanish imkonini beradi. Agar ilovangiz ushbu portda tinglasa, bu muhim. Agar ilovangiz boshqa portdan foydalansa, port raqamini moslashtiring.CMD ["npm", "start"]: Konteyner ishga tushganda bajariladigan buyruqni belgilaydi. Bu holda biz Node.js ilovalarini ishga tushirish uchun umumiy buyruq bo'lgannpm startdan foydalanamiz. Ushbu buyruqpackage.jsonningscriptsbo'limida belgilangan buyruqqa mos kelishiga ishonch hosil qiling.
Docker tasvirini yaratish
Dockerfile yaratganingizdan so'ng, quyidagi buyruqdan foydalanib Docker tasvirini yaratishingiz mumkin:
docker build -t my-node-app .
Qayerda:
docker build: Tasvirlarni yaratish uchun Docker buyrug'i.-t my-node-app: Tasvir uchun tegni (nomni) belgilaydi. Ilovangiz uchun tavsiflovchi nomni tanlang..: Qurilish kontekstini belgilaydi, bu joriy katalog. Docker tasvirni yaratish uchun ushbu katalogdagiDockerfiledan foydalanadi.
Keyin Docker Dockerfile-dagi ko'rsatmalarni bajarib, tasvirni qatlamma-qatlam yaratadi. Tasvirni birinchi marta yaratganingizda, asosiy tasvirni yuklab olish va bog'liqliklarni o'rnatish uchun biroz vaqt ketishi mumkin. Biroq, keyingi qurilishlar ancha tezroq bo'ladi, chunki Docker oraliq qatlamlarni keshlashadi.
Docker konteynerini ishga tushirish
Tasvir yaratilgandan so'ng, undan quyidagi buyruqdan foydalanib konteynerni ishga tushirishingiz mumkin:
docker run -p 3000:3000 my-node-app
Qayerda:
docker run: Konteynerlarni ishga tushirish uchun Docker buyrug'i.-p 3000:3000: Xost mashinasidagi 3000 portni konteyner ichidagi 3000 portga xaritalaydi. Bu sizga brauzeringizdanlocalhost:3000yordamida ilovangizga kirishga imkon beradi. Birinchi raqam xost porti, ikkinchi raqam konteyner portidir.my-node-app: Ishga tushirmoqchi bo'lgan tasvirning nomi.
Endi ilovangiz Docker konteyneri ichida ishlashi kerak. Brauzeringizni ochib va localhost:3000 (yoki siz belgilagan port) ga o'tish orqali unga kirishingiz mumkin. Ilovangizning xush kelibsiz ekranini yoki dastlabki UI-ni ko'rishingiz kerak.
Docker Compose-dan foydalanish
Ko'p xizmatli yanada murakkab ilovalar uchun Docker Compose bebaho vositadir. Bu sizga YAML faylidan foydalanib ko'p konteynerli ilovalarni belgilash va boshqarish imkonini beradi. Node.js ilovamiz uchun docker-compose.yml faylini yarataylik:
version: "3.9"
services:
app:
build: .
ports:
- "3000:3000"
volumes:
- .:/app
environment:
NODE_ENV: development
command: npm run dev
Har bir bo'limni ko'rib chiqaylik:
version: "3.9": Docker Compose fayl formatining versiyasini belgilaydi.services: Ilovangizni tashkil etuvchi xizmatlarni belgilaydi. Bu holda bizdaappnomli bitta xizmat mavjud.build: .: Tasvir joriy katalogdagiDockerfiledan yaratilishi kerakligini belgilaydi.ports: - "3000:3000": Xost mashinasidagi 3000 portni konteyner ichidagi 3000 portga xaritalaydi, budocker runbuyrug'iga o'xshaydi.volumes: - .:/app: Xost mashinasidagi joriy katalogingizni konteyner ichidagi/appkatalogiga o'rnatadigan hajm yaratadi. Bu sizga xost mashinasida kodingizga o'zgartirishlar kiritishga va ularning konteyner ichida avtomatik ravishda aks etishiga imkon beradi, bu esa issiq yuklashni yoqadi.environment: NODE_ENV: development: Konteyner ichidagiNODE_ENVmuhit o'zgaruvchisinidevelopmentga o'rnatadi. Bu ilovangizni ishlab chiqish rejimida ishlashga sozlash uchun foydalidir.command: npm run dev: Dockerfile-da belgilangan standart buyruqni bekor qiladi. Bu holda biznpm run devdan foydalanamiz, bu ko'pincha issiq yuklash bilan ishlab chiqish serverini ishga tushirish uchun ishlatiladi.
Docker Compose yordamida ilovani ishga tushirish uchun docker-compose.yml faylini o'z ichiga olgan katalogga o'ting va quyidagi buyruqni bajaring:
docker-compose up
Docker Compose tasvirni yaratadi (agar kerak bo'lsa) va konteynerni ishga tushiradi. -d bayrog'ini konteynerni ajratilgan rejimda (fon rejimida) ishga tushirish uchun qo'shish mumkin.
Ilg'or konfiguratsiya parametrlari
Dockerlangan JavaScript ishlab chiqish muhitingizni yaxshilash uchun ba'zi ilg'or konfiguratsiya parametrlari:
1. Ko'p bosqichli qurilishlar
Ko'p bosqichli qurilishlar sizga Dockerfile da bir nechta FROM ko'rsatmalaridan foydalanishga imkon beradi, ularning har biri turli xil qurilish bosqichini ifodalaydi. Bu qurilish muhitini ish vaqtidan ajratish orqali yakuniy tasviringizning o'lchamini kamaytirish uchun foydalidir.
# 1-bosqich: Ilovani qurish
FROM node:18-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
# 2-bosqich: Ish vaqti tasvirini yaratish
FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
Ushbu misolda, birinchi bosqich (builder) Node.js yordamida ilovani quradi. Ikkinchi bosqich qurilgan ilova fayllariga xizmat ko'rsatish uchun Nginx-dan foydalanadi. Faqat birinchi bosqichdagi qurilgan fayllar ikkinchi bosqichga nusxalanadi, natijada kichikroq va samaraliroq tasvir olinadi.
2. Muhit o'zgaruvchilaridan foydalanish
Muhit o'zgaruvchilari kodingizni o'zgartirmasdan ilovangizni sozlashning kuchli usuli hisoblanadi. Muhit o'zgaruvchilarini docker-compose.yml faylida belgilashingiz yoki -e bayrog'i yordamida ish vaqtida ularni uzatishingiz mumkin.
services:
app:
environment:
API_URL: "http://api.example.com"
Ilovangiz ichida siz ushbu muhit o'zgaruvchilariga process.env yordamida kirishingiz mumkin.
const apiUrl = process.env.API_URL;
3. Ishlab chiqish uchun hajm o'rnatish
Hajm o'rnatish (Docker Compose misolida ko'rsatilganidek) ishlab chiqish uchun juda muhim, chunki u sizga xost mashinasida kodingizga o'zgartirishlar kiritishga va ularning darhol konteyner ichida aks etishiga imkon beradi. Bu har safar o'zgartirish kiritganingizda tasvirni qayta qurish zaruratini yo'q qiladi.
4. VS Code bilan disk raskadrovka
VS Code Docker konteynerlari ichida ishlaydigan Node.js ilovalarini disk raskadrovka qilish uchun ajoyib yordamga ega. Siz ishlayotgan konteynerga biriktirish va tanaffus nuqtalarini o'rnatish, o'zgaruvchilarni tekshirish va kodingizni bosqichma-bosqich o'tkazish uchun VS Code Docker kengaytmasidan foydalanishingiz mumkin.
Avval VS Code-ga Docker kengaytmasini o'rnating. Keyin, .vscode katalogingizda quyidagi konfiguratsiya bilan launch.json faylini yarating:
{
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "attach",
"name": "Attach to Docker",
"port": 9229,
"address": "localhost",
"remoteRoot": "/app",
"localRoot": "${workspaceFolder}"
}
]
}
Node.js ilovangiz --inspect yoki --inspect-brk bayrog'i bilan ishga tushirilganligiga ishonch hosil qiling. Masalan, ushbu bayroqni o'z ichiga olish uchun docker-compose.yml faylini o'zgartirishingiz mumkin:
services:
app:
command: npm run dev -- --inspect=0.0.0.0:9229
Keyin, VS Code-da "Attach to Docker" konfiguratsiyasini tanlang va disk raskadrovkani boshlang. Siz konteyner ichida ishlaydigan kodingizga tanaffus nuqtalarini o'rnatishingiz va disk raskadrovka qilishingiz mumkin bo'ladi.
5. Xususiy npm reestridan foydalanish
Agar siz shaxsiy npm paketlari bilan loyihada ishlayotgan bo'lsangiz, Docker konteyneringizni xususiy npm reestringiz bilan autentifikatsiya qilish uchun sozlashingiz kerak bo'ladi. Buni docker-compose.yml faylida NPM_TOKEN muhit o'zgaruvchisini o'rnatish yoki loyiha katalogingizda .npmrc faylini yaratish va uni konteynerga nusxalash orqali amalga oshirish mumkin.
# Dockerfile
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
COPY .npmrc .
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]
`.npmrc` faylida autentifikatsiya tokeni bo'lishi kerak:
//registry.npmjs.org/:_authToken=YOUR_NPM_TOKEN
YOUR_NPM_TOKEN ni haqiqiy npm tokeningiz bilan almashtirishni unutmang. Ushbu tokenni xavfsiz saqlang va uni ommaviy repozitoriyangizga topshirmang.
6. Tasvir hajmini optimallashtirish
Docker tasviringiz hajmini kichik saqlash qurilish va joylashtirish vaqtlarini tezlashtirish uchun muhimdir. Tasvir hajmini optimallashtirish bo'yicha ba'zi maslahatlar:
node:alpinekabi engil asosiy tasvirdan foydalaning.- Qurilish muhitini ish vaqtidan ajratish uchun ko'p bosqichli qurilishlardan foydalaning.
- Tasvirdan keraksiz fayllar va kataloglarni olib tashlang.
- Qurilish kontekstidan fayllar va kataloglarni chiqarib tashlash uchun
.dockerignorefaylidan foydalaning. - Qatlamlar sonini kamaytirish uchun bir nechta
RUNbuyruqlarini bitta buyruqqa birlashtiring.
Misol: React ilovasini Dockerlash
Ushbu tushunchalarni amaliy misol bilan ko'rsataylik: Create React App bilan yaratilgan React ilovasini Dockerlash.
Avval Create React App yordamida yangi React ilovasini yarating:
npx create-react-app my-react-app
cd my-react-app
Keyin, loyihaning ildiz katalogida Dockerfile yarating:
FROM node:18-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
FROM nginx:alpine
COPY --from=builder /app/build /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
docker-compose.yml faylini yarating:
version: "3.9"
services:
app:
build: .
ports:
- "3000:80"
volumes:
- .:/app
environment:
NODE_ENV: development
Eslatma: Biz xostdagi 3000 portni konteyner ichidagi 80 portga xaritalayapmiz, chunki Nginx ilovaga 80 portda xizmat ko'rsatmoqda. Ilovangiz konfiguratsiyasiga qarab port xaritasini sozlash kerak bo'lishi mumkin.
Nihoyat, ilovani qurish va ishga tushirish uchun docker-compose up ni ishga tushiring. Keyin brauzeringizda localhost:3000 ga o'tish orqali ilovaga kirishingiz mumkin.
Umumiy muammolar va nosozliklarni bartaraf etish
Ehtiyotkorlik bilan konfiguratsiya bilan ham Docker bilan ishlashda muammolarga duch kelishingiz mumkin. Bu erda ba'zi umumiy muammolar va ularning echimlari:
- Port ziddiyatlari:
docker-compose.ymlyokidocker runbuyrug'ida xaritalayotgan portlar xost mashinangizdagi boshqa ilovalar tomonidan allaqachon ishlatilmayotganligiga ishonch hosil qiling. - Hajmni o'rnatish muammolari: O'rnatayotgan fayllar va kataloglardagi ruxsatlarni tekshiring. Docker fayllarga kirish uchun zarur ruxsatlarga ega bo'lmasligi mumkin.
- Tasvirni yaratishdagi xatolar: Xatolar uchun
docker buildbuyrug'ining chiqishini diqqat bilan tekshiring. Umumiy sabablarga noto'g'riDockerfilesintaksisi, etishmayotgan bog'liqliklar yoki tarmoq muammolari kiradi. - Konteynerning buzilishi: Konteyner jurnallarini ko'rish va buzilish sababini aniqlash uchun
docker logsbuyrug'idan foydalaning. Umumiy sabablarga ilova xatoliklari, etishmayotgan muhit o'zgaruvchilari yoki resurs cheklovlari kiradi. - Sekin qurilish vaqtlari: Ko'p bosqichli qurilishlardan, bog'liqliklarni keshlashdan va qatlamlar sonini minimallashtirishdan foydalanib,
Dockerfileni optimallashtiring.
Xulosa
Docker izchil va takrorlanadigan JavaScript ishlab chiqish muhitini yaratish uchun kuchli va ko'p qirrali echimni taqdim etadi. Docker-dan foydalanib, siz moslik muammolarini bartaraf qilishingiz, joylashtirishni soddalashtirishingiz va jamoangizdagi har bir kishi bir xil muhitda ishlayotganligiga ishonch hosil qilishingiz mumkin.
Ushbu qo'llanma Dockerlangan JavaScript ishlab chiqish muhitini o'rnatish asoslarini, shuningdek ba'zi ilg'or konfiguratsiya parametrlarini qamrab oldi. Ushbu bosqichlarni bajarish orqali siz o'z JavaScript loyihalaringiz uchun ularning murakkabligi yoki jamoangiz hajmidan qat'i nazar, mustahkam va samarali ish jarayonini yaratishingiz mumkin. Docker-ni qabul qiling va JavaScript ishlab chiqish jarayonining to'liq salohiyatini oching.
Keyingi qadamlar:
- O'zingizning maxsus ehtiyojlaringizga mos keladigan oldindan qurilgan tasvirlar uchun Docker Hub-ni o'rganing.
- Ko'p konteynerli ilovalarni boshqarish uchun Docker Compose-ga chuqurroq sho'ng'ing.
- Ishlab chiqarish muhitida Docker konteynerlarini orkestr qilish uchun Docker Swarm va Kubernetes haqida bilib oling.
Ushbu eng yaxshi amaliyotlarni ish jarayoniga kiritish orqali siz JavaScript ilovalaringiz uchun yanada samarali, ishonchli va kengaytiriladigan ishlab chiqish muhitini yaratishingiz mumkin, bu bugungi raqobatbardosh bozorda muvaffaqiyatni ta'minlaydi.